/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.client.assembler.output;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import fr.generali.accueilclient.client.om.IAdresse;
import fr.generali.accueilclient.client.om.impl.Adresse;
import fr.generali.accueilclient.utils.constantes.MotifModificationAdresseEnum;
import fr.generali.accueilclient.utils.stringbuilder.StringBuilderUtils;
import fr.generali.refservcommuns.rce.servperscom.ctc.gestioncontacts.DtoAdressePostale;

/**
 * Transforme un {@link DtoAdressePostale} en {@link IAdresse}
 * 
 * @author selrhazala
 */
@Component("dtoAdressePostale2AdresseConverter")
public class DtoAdressePostale2AdresseConverter implements Converter<DtoAdressePostale, IAdresse> {

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(DtoAdressePostale2AdresseConverter.class);

    /**
     * {@inheritDoc}
     */
    public IAdresse convert(DtoAdressePostale input) {
        LOGGER.debug("assemble");
        IAdresse adresse = null;

        if (input != null) {
            adresse = new Adresse();
            if (input.getNumOrdre() != null) {
                adresse.setNumOrdre(input.getNumOrdre());
            }

            if (input.getIdentifiant() != null) {
                adresse.setIdentifiant(input.getIdentifiant());
            }

            adresse.setMotifNpai((input.getInfoNPAI() == null || StringUtils
                            .isEmpty(input.getInfoNPAI().getMotifNpai())) ? null : input.getInfoNPAI().getMotifNpai());
            adresse.setBoitePostale(input.getLigne5());
            adresse.setCodePays(input.getPays());
            adresse.setCodePostal(input.getCodePostal());
            // adresse.setPointGeographique(input.getLigne4());
            adresse.setPointGeographique(input.getLigne3());
            adresse.setPointRemise(input.getComplementIdentiteDestinataire());
            adresse.setQualiteOccupation(input.getNatureOccupant());
            adresse.setTypeLogement(input.getTypeBatiment());
            StringBuilder ville = new StringBuilder("");
            if (input.getLocalite() != null) {
                ville.append(input.getLocalite());
            }
            if (input.getCedex() != null) {
                ville.append(StringBuilderUtils.SEPARATOR_ESPACE);
                ville.append(input.getCedex());
            }
            adresse.setVille(ville.toString());
            // adresse.setNumeroVoie(input.getNumeroRue());
            StringBuilder voie = new StringBuilder("");
            if (input.getNumeroRue() != null) {
                voie.append(input.getNumeroRue());
                voie.append(StringBuilderUtils.SEPARATOR_ESPACE);
            }
            if (input.getExtensionNumeroRue() != null) {
                voie.append(input.getExtensionNumeroRue());
                voie.append(StringBuilderUtils.SEPARATOR_ESPACE);
            }
            if (input.getTypeRue() != null) {
                voie.append(input.getTypeRue());
                voie.append(StringBuilderUtils.SEPARATOR_ESPACE);
            }
            if (input.getNomRue() != null) {
                voie.append(input.getNomRue());
            }
            adresse.setVoie(voie.toString());

            if (input.getDateDerniereMaj() != null) {
                adresse.setDateDerniereMaj(input.getDateDerniereMaj().toGregorianCalendar().getTime());
            }
            // adresse.setUserDerniereMaj(input.get);
            if (input.getDateNormalisationAdresse() != null) {
                adresse.setDateNormalisation(input.getDateNormalisationAdresse().toGregorianCalendar().getTime());
            }

            // RG : Par défaut on sette la RaisonModificationAdresse à
            // 'CORRECTION'
            adresse.setMotifModifAdresse(MotifModificationAdresseEnum.MOTIF_CORRECTION_MODIF_ADRESSE.getCode());
            /*
             * if (input.getRaisonModificationAdresse() != null) {
             * adresse.setMotifModifAdresse
             * (input.getRaisonModificationAdresse()); }
             */

            if (input.isValide() != null) {
                adresse.setIndicateurNormalisation(input.isValide());
            }

            if (input.getInfoNPAI() != null) {
                if (StringUtils.isNotEmpty(input.getInfoNPAI().getMotifNpai())) {
                    adresse.setMotifNpai(input.getInfoNPAI().getMotifNpai());
                    adresse.setTopNpai(true);
                }
                if (input.getInfoNPAI().getDateNpai() != null) {
                    adresse.setDateNpai(input.getInfoNPAI().getDateNpai().toGregorianCalendar().getTime());
                }
            }
        }

        return adresse;
    }
}
